package main

import (
	"context"
	"database/sql"
	"goseckill/common"
	"goseckill/dao"
	"goseckill/frontend/controllers"
	"goseckill/frontend/middleware"
	"goseckill/rabbitmq"
	"goseckill/service"
	"log"

	// "github.com/kataras/iris/mvc"
	// "github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/mvc"
	"gorm.io/gorm"
)

// 前端的main
// 前端的功能：连接数据库，浏览商品，下订单，登录？

func initDB(app *iris.Application) (*sql.DB, *gorm.DB){
	db,err := common.NewMySQLConn()
	if err!=nil{
		log.Fatal(err)
	}
	gormDB,err := common.NewGormMysqlConn()
	if err!=nil{
		log.Fatal(err)
	}
	return db,gormDB
}


func main() {
	// 创建iris实例
	app := iris.New()
	// 设置日志模式
	app.Logger().SetLevel("debug")

	// 数据库
	// db,gormDB := initDB(app)
	db,_ := initDB(app)
	// 并发设置 上下文设置
	ctx,cancel := context.WithCancel(context.Background())
	defer cancel()

	// TODO 注册消息队列 rabbitmq
	// 消息队列
	rabbitMQ := rabbitmq.NewRabbitMQSimple("Product")

	// 注册控制器
	// TODO 用户  商品和订单的控制器
	userDao:= dao.NewUserDao("users", db)
	userServie := service.NewUserService(userDao)
	// 分组路由
	userParty := app.Party("/user")
	userApp := mvc.New(userParty)
	// 注册控制器
	userApp.Register(userServie, ctx)
	userApp.Handle(new(controllers.UserController))

	// 商品和订单 
	productDao := dao.NewProductManager("products",db)
	productService := service.NewProductService(productDao)
	orderDao := dao.NewOrderDao("orders",db)
	orderService := service.NewOrderService(orderDao)
	productParty := app.Party("/product")
	proMVC := mvc.New(productParty)
	// 注册中间间
	productParty.Use(middleware.AuthConProduct)
	proMVC.Register(productService,orderService, ctx, rabbitMQ)
	proMVC.Handle(new(controllers.ProductController))


	// TODO 注册静态资源
	app.Run(
		iris.Addr("localhost:8082"),
		iris.WithOptimizations,
	)
}